package com.pattern.singleton.lazy;

import java.lang.reflect.Constructor;

/**
 * Description  反射暴力实例化测试
 *
 * @author hubiao
 * @since 2020-08-20 20:58
 */
public class LazyInnerClassSingletonTest {

    public static void main(String[] args) throws Exception {
        //开发者不走寻常路，使用反射创建实例
        Class className = LazyInnerClassSingleton.class;
        //获取无参构造函数
        Constructor constructor = className.getDeclaredConstructor( null );
        //暴力反射
//            Class类的getDeclaredConstructor()方法,可获取到类的私有构造器(包括带有其他修饰符的构造器），
//            但在使用时private的构造器时，必须设置setAccessible()为true,才可以获取并操作该Constructor对象
        constructor.setAccessible( true );
        //创建对象
        LazyInnerClassSingleton lazyInnerClassSingleton = (LazyInnerClassSingleton) constructor.newInstance();

        //正常操作的返回对象
        LazyInnerClassSingleton lazyInnerClassSingleton1 = LazyInnerClassSingleton.getInstance();

        //比较两个对象是否相等（不相等则违反了单例模式原则）
        System.out.println( lazyInnerClassSingleton == lazyInnerClassSingleton1 );

    }
}
